import axios from 'axios'
import config from '~/config'

// 接口请求默认配置 - 更多配置请查看axios官方文档
axios.defaults.baseURL = config[import.meta.env.MODE].baseURL
axios.defaults.timeout = 10 * 1000 // 请求超时时间 10S
axios.defaults.withCredentials = false // 表示跨域请求时是否需要使用凭证 默认false
// axios.defaults.headers['token'] = 'xxxx' // 如需要默认请求加入token，也可根据获取路由表进行配置
axios.defaults.headers.post['Content-Type'] = 'application/json; charset=UTF-8' // post请求默认返回的内容类型

/**
 * 请求异常拦截
 * @param {object} error：错误对象
 */
const errorHandler = (error) => {
	// TODO：与后端协商的返回错误字段，可设置为弹窗提示
	const status = error.code
	switch (status) {
		case 400:
			error.message = '请求错误'
			break
		case 500:
			error.message = '服务器内部错误'
			break
	}
	return Promise.reject(error)
}

/**
 * 请求前拦截
 * @param  {object} config：请求对象
 */
axios.interceptors.request.use((config) => {
	// TODO：在发送请求之前做些什么，一般让每个请求携带自定义token，还有请求加载图标
	console.log(config)
	return config
}, errorHandler)

/**
 * 响应后拦截
 * @param  {object} response：响应对象
 */
axios.interceptors.response.use((response) => {
	// TODO：对响应数据做点什么
	console.log(response)
	return response
}, errorHandler)

export default axios
